;(async function () {
  const express = require('express')
  // md5 是第三方的包. 用来对存储到数据库中的密码进行加密
  const md5 = require('md5')
  // 连接数据库
  const db = require('./db/db')
  // 引入model对象. model可以对数据库进行增删改查
  const model = require('./db/model')

  try {
    await db // 如果连接成功,则执行后面的代码

    console.log('数据库连接成功')

    const app = express()
    // express.static 可以帮我们处理所有的静态资源
    // app.use(express.static('静态资源所处的目录的路径'))
    app.use(express.static('./web'))
    // 处理post请求上传的数据
    app.use(express.urlencoded({ extended: false }))

    // 注册的路由
    app.post('/registe', async (req, res) => {
      // 获取用户上传的数据
      const { username, password } = req.body
      // 对密码进行加密
      try {
        // 往数据库中添加数据
        await model.create({ username, password: md5(password) })
        // 注册成功则重定向到登录页面
        res.redirect('http://localhost:5000/view/login.html')
      } catch (error) {
        res.send('注册失败,请稍后重试')
      }
    })

    // 登录的路由
    app.post('/login', async (req, res) => {
      const { username, password } = req.body
      try {
        const user = await model.findOne({ username, password: md5(password) })
        if (user) {
          // 验证成功,表示用户登录成功, 重定向到管理界面
          res.redirect('http://localhost:5000/view/manger.html?username='+user.username)
        } else {
          // 验证失败,用户登录失败
          res.send('登录失败了,请确认后重新登录')
        }
      } catch (error) {
        res.send('网络错误,请稍后再试')
      }
    })

    app.listen(5000, (err) => {
      if (err) console.log('失败')
      else console.log('成功')
    })
  } catch (error) {
    console.log('数据库连接失败', error)
  }
})()
